package app_demo.stringTable;

/**
 * @Description 字符串常量池
 * @Author Firenut
 * @Date 2023-02-16 15:53
 */
public class StringTableTest {
    public static void main(String[] args) {
        String s1 = "a";
        String s2 = "b";
        String s3 = "a" + "b"; // 编译阶段优化为 String s3 = "ab";
        String s4 = s1 + s2; // s1,s2是变量，编译阶段不能确定,需要在运行时,调用StringBuffer进行拼接
        String s5 = "ab";
        String s6 = s4.intern(); //返回的是字符串常量池中"ab"的引用
        // 问
        System.out.println(s3 == s4); // false
        System.out.println(s3 == s5); // true
        System.out.println(s3 == s6); // true
        System.out.println(s4 == s6); // false

        String x2 = new String("c") + new String("d");
        String x1 = "cd";
        String x3 = x2.intern();      // 如果串池中存在,返回串池中字符串的引用; 如果串池不存在,则将该字符串加入串池并返回引用
        // 问，如果调换了【最后两行代码】的位置呢，如果是jdk1.6呢
        System.out.println(x1 == x2); // false
        System.out.println(x2 == x3); // false
        System.out.println(x1 == x3); // true

//        String x2 = new String("c") + new String("d");
//        String x3 = x2.intern();
//        String x1 = "cd";
//        // 问，如果调换了【最后两行代码】的位置呢，如果是jdk1.6呢
//        System.out.println(x1 == x2);  // true
//        System.out.println(x2 == x3);  // true
//        System.out.println(x1 == x3); // true
    }
}